<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 函数定义阶段 
        function fn1(num1,num2){
            return num1+num2;
        }
        // 栈内存 开辟一个空间  名字  fn1
        // 堆内存 开辟一个空间  把函数代码复制到堆内存
        // 把堆内存的地址 给到栈内存 fn1空间内  

        // fn1空间内的地址 指向堆内存  


        // 执行阶段

        // fn1(10,20)

        // 按照标识符的名字  去栈内存 查找  如果有
        // 判断空间内是否是个地址  如果不是地址 提示 is not a function 
        // 如果空间内是个地址  顺着地址找到堆内存 对应的存储空间  

        // 在调用栈内 开辟一个新的函数执行空间 
        // 在执行空间中先进行形参赋值  
        // 在执行空间中进行预解析 
        // 在执行空间中完整执行一遍函数内的代码 
        // 函数执行完毕后 调用栈内的函数执行空间被销毁 

        
    </script>
</body>
</html>